using System;
using EnvDTE;

namespace NUnitGenAddIn.Core.Test
{
    /// <summary>
    /// Mock Code Fucntion
    /// </summary>
	public class MockCodeFunction : MockCodeElement, CodeFunction
	{
        /// <summary>
        /// Initializes a new instance of the <see cref="MockCodeFunction"/> class.
        /// </summary>
        /// <param name="_name">The _name.</param>
		public MockCodeFunction(string _name) : base(_name)
		{}

        /// <summary>
        /// Initializes a new instance of the <see cref="MockCodeFunction"/> class.
        /// </summary>
        /// <param name="_name">The _name.</param>
        /// <param name="children">The children.</param>
		public MockCodeFunction(string _name, CodeElements children) : base(_name, children)
		{}

		#region CodeFunction Members

        /// <summary>
        /// Gets or sets the access.
        /// </summary>
        /// <value>The access.</value>
		public vsCMAccess Access
		{
			get { throw new Exception("The method or operation is not implemented."); }
			set { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Adds the attribute.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="Value">The value.</param>
        /// <param name="Position">The position.</param>
        /// <returns></returns>
		public CodeAttribute AddAttribute(string name, string Value, object Position)
		{
			throw new Exception("The method or operation is not implemented.");
		}

        /// <summary>
        /// Adds the parameter.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="type">The type.</param>
        /// <param name="Position">The position.</param>
        /// <returns></returns>
		public CodeParameter AddParameter(string name, object type, object Position)
		{
			throw new Exception("The method or operation is not implemented.");
		}

        /// <summary>
        /// Gets the attributes.
        /// </summary>
        /// <value>The attributes.</value>
		public CodeElements Attributes
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets or sets a value indicating whether this instance can override.
        /// </summary>
        /// <value>
        /// 	<c>true</c> if this instance can override; otherwise, <c>false</c>.
        /// </value>
		public bool CanOverride
		{
			get { throw new Exception("The method or operation is not implemented."); }
			set { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets or sets the comment.
        /// </summary>
        /// <value>The comment.</value>
		public string Comment
		{
			get { throw new Exception("The method or operation is not implemented."); }
			set { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets or sets the doc comment.
        /// </summary>
        /// <value>The doc comment.</value>
		public string DocComment
		{
			get { throw new Exception("The method or operation is not implemented."); }
			set { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets the kind of the function.
        /// </summary>
        /// <value>The kind of the function.</value>
		public vsCMFunction FunctionKind
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets a value indicating whether this instance is overloaded.
        /// </summary>
        /// <value>
        /// 	<c>true</c> if this instance is overloaded; otherwise, <c>false</c>.
        /// </value>
		public bool IsOverloaded
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets or sets a value indicating whether this instance is shared.
        /// </summary>
        /// <value><c>true</c> if this instance is shared; otherwise, <c>false</c>.</value>
		public bool IsShared
		{
			get { throw new Exception("The method or operation is not implemented."); }
			set { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets the kind.
        /// </summary>
        /// <value>The kind.</value>
		public override vsCMElement Kind
		{
			get { return vsCMElement.vsCMElementFunction; }
		}

        /// <summary>
        /// Gets or sets a value indicating whether [must implement].
        /// </summary>
        /// <value><c>true</c> if [must implement]; otherwise, <c>false</c>.</value>
		public bool MustImplement
		{
			get { throw new Exception("The method or operation is not implemented."); }
			set { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets the overloads.
        /// </summary>
        /// <value>The overloads.</value>
		public CodeElements Overloads
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets the parameters.
        /// </summary>
        /// <value>The parameters.</value>
		public CodeElements Parameters
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Removes the parameter.
        /// </summary>
        /// <param name="Element">The element.</param>
		public void RemoveParameter(object Element)
		{
			throw new Exception("The method or operation is not implemented.");
		}

        /// <summary>
        /// Gets or sets the type.
        /// </summary>
        /// <value>The type.</value>
		public CodeTypeRef Type
		{
			get { throw new Exception("The method or operation is not implemented."); }
			set { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Get_s the prototype.
        /// </summary>
        /// <param name="Flags">The flags.</param>
        /// <returns></returns>
		public string get_Prototype(int Flags)
		{
			throw new Exception("The method or operation is not implemented.");
		}

		#endregion
	}
}